﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFMoneyLover
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "MoneyLoverService" in code, svc and config file together.
    public class MoneyLoverService : IMoneyLoverService
    {
        DataDomainDataContext _db { set; get; }
         public MoneyLoverService()
        {
            _db = new DataDomainDataContext();
        }
        public TAIKHOAN Checklogin(string user, string pass)
        {
            var objdb = _db.TAIKHOANs.Where(p => p.USERNAME.Equals(user) && p.PASS.Equals(pass)).SingleOrDefault();
            return objdb != null ? objdb : null;
        }
        public bool DangKy(TAIKHOAN objui)
        {
            try
            {
                _db.TAIKHOANs.InsertOnSubmit(objui);
                _db.SubmitChanges();
                return true;
            }
            catch 
            {
                return false;
            }
        }

        #region Thu
         public List<LOAIGIAODICH> GetListLoaiThu()
        {
            return _db.LOAIGIAODICHes.Where(p => p.MAGD == 1).ToList();
        }
         public List<THU_CHI> GetThu(String user)
         {
             return _db.THU_CHIs.Where(p => p.USERNAME.Equals(user) && p.MAGD == 1).ToList();
         }
        #endregion

        #region Chi
        public List<LOAIGIAODICH> GetListLoaiChi()
        {
            return _db.LOAIGIAODICHes.Where(p => p.MAGD == 2).ToList();
        }
        public List<THU_CHI> GetChi(String user)
        {
            return _db.THU_CHIs.Where(p => p.USERNAME.Equals(user) && p.MAGD == 2).ToList();
        }
      
        #endregion

        #region Vay
        public List<VAY_NO> GetListVayChuaTra(String user)
        {
            return _db.VAY_NOs.Where(P => P.MAGD == 3&&P.DATRA.Equals(false)&&P.USERNAME.Equals(user)).ToList();
        }
        public List<VAY_NO> GetListVayDaTra(String user)
        {
            return _db.VAY_NOs.Where(P => P.MAGD == 3 && P.DATRA.Equals(true) && P.USERNAME.Equals(user)).ToList();
        }
        public List<VAY_NO> GetListNoChuaTra(String user)
        {
            return _db.VAY_NOs.Where(P => P.MAGD == 4 && P.DATRA.Equals(false) && P.USERNAME.Equals(user)).ToList();
        }
        public List<VAY_NO> GetListNoDaTra(String user)
        {
            return _db.VAY_NOs.Where(P => P.MAGD == 4 && P.DATRA.Equals(true) && P.USERNAME.Equals(user)).ToList();
        }
        #endregion

        public TAIKHOAN GetTaikhoan(String user)
        {
            return _db.TAIKHOANs.Where(p => p.USERNAME.Equals(user)).SingleOrDefault();
        }
        public bool InsertThuChi(THU_CHI objdb)
        {
            try
            {
                _db.THU_CHIs.InsertOnSubmit(objdb);
                
                var taikhoan = GetTaikhoan(objdb.USERNAME);
                if (objdb.MAGD.Equals(1))
                {
                   
                    taikhoan.TIENTIETKIEM += objdb.SOTIEN;
                }
                else
                {

                    taikhoan.TIENTIETKIEM -= objdb.SOTIEN;
                }
                _db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }

        }

        public bool InsertVayNo(VAY_NO objui)
        {
            try
            {
                _db.VAY_NOs.InsertOnSubmit(objui);
                _db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }
        public List<KEHOACH> GetListKeHoach()
        {
            return _db.KEHOACHes.ToList();
        }

        public List<NGOAITE> GetListNgoaiTe()
        {
            return _db.NGOAITEs.ToList();
        }

        public List<GIAODICH> GetListGiaoDich()
        {
            return _db.GIAODICHes.ToList();
        }
        DateTime ngay = new DateTime();
        public List<THU_CHI> TimKiemThu(String keyword, decimal tien1, decimal tien2, DateTime ngay1, DateTime ngay2)
        {
            var temp = _db.THU_CHIs.Where(p => p.MAGD.Equals(1)).ToList();
            if (!String.IsNullOrEmpty(keyword))
            {
                temp = temp.Where(p => p.TENGD.Contains(keyword) || p.GHICHU.Contains(keyword)).ToList();
            }
            if (tien1 != -1)
            {
                temp = temp.Where(p => p.SOTIEN >= tien1).ToList();
            }
            if (tien2 != -1)
            {
                temp = temp.Where(p => p.SOTIEN <= tien2).ToList();
            }
            if (ngay1 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD >= ngay1).ToList();
            }
            if (ngay2 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD <= ngay2).ToList();
            }
            return temp;
        }
        public List<THU_CHI> TimKiemChi(String keyword, decimal tien1, decimal tien2, DateTime ngay1, DateTime ngay2)
        {
            var temp = _db.THU_CHIs.Where(p => p.MAGD.Equals(2)).ToList();
            if (!String.IsNullOrEmpty(keyword))
            {
                temp = temp.Where(p => p.TENGD.Contains(keyword) || p.GHICHU.Contains(keyword)).ToList();
            }
            if (tien1 !=-1)
            {
                temp = temp.Where(p => p.SOTIEN >= tien1).ToList();
            }
            if (tien2 !=-1)
            {
                temp = temp.Where(p => p.SOTIEN <= tien2).ToList();
            }
            if (ngay1 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD >= ngay1).ToList();
            }
            if (ngay2 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD <= ngay2).ToList();
            }
            return temp;
        }
        public List<VAY_NO> TimKiemVay(String keyword, decimal tien1, decimal tien2, DateTime ngay1, DateTime ngay2)
        {
            var temp = _db.VAY_NOs.Where(p => p.MAGD.Equals(3)).ToList();
            if (!String.IsNullOrEmpty(keyword))
            {
                temp = temp.Where(p => p.TENNGUOIGD.Contains(keyword) || p.GHICHU.Contains(keyword)).ToList();
            }
            if (tien1 != -1)
            {
                temp = temp.Where(p => p.SOTIEN >= tien1).ToList();
            }
            if (tien2 != -1)
            {
                temp = temp.Where(p => p.SOTIEN <= tien2).ToList();
            }
            if (ngay1 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD >= ngay1).ToList();
            }
            if (ngay2 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD <= ngay2).ToList();
            }
            return temp;
        }
        public List<VAY_NO> TimKiemNo(String keyword, decimal tien1, decimal tien2, DateTime ngay1, DateTime ngay2)
        {
            var temp = _db.VAY_NOs.Where(p => p.MAGD.Equals(4)).ToList();
            if (!String.IsNullOrEmpty(keyword))
            {
                temp = temp.Where(p => p.TENNGUOIGD.Contains(keyword) || p.GHICHU.Contains(keyword)).ToList();
            }
            if (tien1 != -1)
            {
                temp = temp.Where(p => p.SOTIEN >= tien1).ToList();
            }
            if (tien2 != -1)
            {
                temp = temp.Where(p => p.SOTIEN <= tien2).ToList();
            }
            if (ngay1 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD >= ngay1).ToList();
            }
            if (ngay2 != ngay)
            {
                temp = temp.Where(p => p.NGAYGD <= ngay2).ToList();
            }
            return temp;
        }

        public bool InsertKeHoach(KEHOACH obj)
        {
            try
            {
                _db.KEHOACHes.InsertOnSubmit(obj);
                _db.SubmitChanges();
                return true;
            }
            catch 
            {
                return false;
            	
            }
        }
    }
}
